package com.akjava.lib.android;

import java.io.BufferedInputStream;
import java.io.InputStream;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.ListView;


/**
 * 
 * R.java 使わないときに手軽にWidgetを作るためのユーティリティー
 * @author aki
 *
 */
public class WidgetUtil {

	public static LinearLayout createLinearLayout(Context context,boolean horizontal){
		LinearLayout linear=new LinearLayout(context);
		if(!horizontal){
		linear.setOrientation(LinearLayout.VERTICAL);
		}
		return linear;
	}
	

	
	public static Button createButton(Context context,String label){
		Button bt=new Button(context);
		bt.setText(label);
		return bt;
	}
	
	public static EditText createEditText(Context context){
		return createEditText(context,"");
	}
	public static EditText createEditText(Context context,String text){
		EditText bt=new EditText(context);
		
		
		bt.setText(text);
		
		return bt;
	}
	
	
	
	public static ImageButton createImageButton(Context context,Bitmap bitmap){
		ImageButton bt=new ImageButton(context);
		
		bt.setImageBitmap(bitmap);
		return bt;
	}
	/**
	 * 
	 * ImageButton作るときとか
	 * ImageButton imageBt=WidgetUtil.createImageButton(this, WidgetUtil.loadBitmap(getClass(), "icon_level_up.png"));
          
	 * 通常画像のあるパッケージのクラスから、呼び出すのが無難
	 * 
	 * @param clazz クラスローダーの元となるクラス
	 * @param resouceName リソース名　元となるクラスとの位置関係に注意
	 * @return
	 */
	public static Bitmap loadBitmap(Class clazz,String resouceName){
		 InputStream input=clazz.getResourceAsStream(resouceName);
         Bitmap bitmap=BitmapFactory.decodeStream(new BufferedInputStream(input,1024*8));
         return bitmap;
	}
	//ListActivity用
	public static ListView createListActivityList(Context context){
		return createList(context, android.R.id.list);
	}
	
	public static ListView createList(Context context,int id){
		ListView list=new ListView(context);
		list.setId(id);
		return list;
	}
	
	
	public static LinearLayout.LayoutParams createLayoutParam(boolean fillWidth,boolean fillHeight){
		int w= LinearLayout.LayoutParams.WRAP_CONTENT;
		int h= LinearLayout.LayoutParams.WRAP_CONTENT;
		if(fillWidth){
			w= LinearLayout.LayoutParams.FILL_PARENT;
		}
		if(fillHeight){
			h=LinearLayout.LayoutParams.FILL_PARENT;
		}
		return new LinearLayout.LayoutParams(w, h);
	}
	
	/**
	 * 
	 * Viewに追加するときに使う
	 * root.addView(WidgetUtil.createListActivityList(this),WidgetUtil.createLayoutParam(true,false,1));
	 * 
	 * @param fillWidth　Parentの幅と同じにするか。VerticalなLinerLayoutでのみtrueにするべき。
	 * @param fillHeight Parentの縦と同じにするか。HorizontalなLinerLayoutでのみtrueにするべき。
	 * @param weight 1以上だと、他Widgetとweightに合わせてスペースを分割する。１つだけ拡張するときに指定したりする
	 * @return
	 */
	public static LinearLayout.LayoutParams createLayoutParam(boolean fillWidth,boolean fillHeight,int weight){
		int w= LinearLayout.LayoutParams.WRAP_CONTENT;
		int h= LinearLayout.LayoutParams.WRAP_CONTENT;
		if(fillWidth){
			w= LinearLayout.LayoutParams.FILL_PARENT;
		}
		if(fillHeight){
			h=LinearLayout.LayoutParams.FILL_PARENT;
		}
		return new LinearLayout.LayoutParams(w, h,weight);
	}
}
